/**
 * 该模块为一些全局通用的方法, 提供给有需要的模块进行调用
*/
const _ = require('lodash')

// 随机生成N位(0~9)之间的随机数
const randomNumber = (num) => {
  let text = ''
  for (let i = 1; i <= num; i++) {
    text += String(_.random(0, 9))
  }
  return text
}

// 随机生成min~max之间位数的字符串
const randomString = (min, max) => {
  const arrList = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

  max = max || min // 当只传入一个参数时, min 等于 max(此时随机数产生位数为min位)
  const range = Math.round(Math.random() * (max - min)) + min;  // 随机获取范围位数

  let str = ""
  for (let i = 0; i < range; i++) {
    const idx = Math.round(Math.random() * (arrList.length - 1));
    str += arrList[idx];
  }
  return str
}

// 同步延迟
const delay = (timeout) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve()
    }, timeout);
  })
}

// 判断是否为JSON格式, istran: 是否需要转换
const isJSON = (value, istran = false) => {
  try {
    if (!value) {
      return false;
    }
    if (Object.prototype.toString.call(value) === '[object Object]') {
      return (istran) ? value : true;
    }
    if (Object.prototype.toString.call(value) !== '[object String]') {
      return false;
    }
    const obj = JSON.parse(value);

    if (obj && typeof(obj) === 'object') {
      return (istran) ? obj : true;
    } else {
      return false;
    }
  } catch (e) {
    return false;
  }
}

module.exports = {
  randomNumber: randomNumber,
  randomString: randomString,
  delay: delay,
  isJSON: isJSON
}